export class Util {

    /**
     * 驼峰命名转横杠连接
     * @param name 
     */
    public static underscoreName(name: string): string {
        let result = '';
        if (name.indexOf('-') >= 0) return name;
        if (name) {
            // 将第一个字符处理成大写
            result += name.substring(0, 1).toUpperCase();
            // 循环处理其余字符
            for (let i = 1; i < name.length; i++) {
                let s = name.substring(i, i + 1);
                // 在大写字母前添加横杠
                if (s === s.toUpperCase()) {
                    result += "-";
                }
                // 其他字符直接转成大写
                result += s.toUpperCase();
            }
        }
        return result.toLowerCase().toString();
    }

    /**
     * 横杠字符串转驼峰命名
     * @param name 
     */
    public static camelName(name: string): string {
        let result = '';
        // 快速检查
        if (!name) {
            // 没必要转换
            return "";
        } else if (name.indexOf('-') < 0) {
            // 不含横杠，仅将首字母小写
            return name.substring(0, 1).toLowerCase() + name.substring(1);
        }
        // 用横杠将原始字符串分割
        let camels: string[] = name.split("-");
        for (let i = 0; i < camels.length; i++) {
            let camel = camels[i];
            // 跳过原始字符串中开头、结尾的下换线或双重横杠
            if (!camel) {
                continue;
            }
            // 处理真正的驼峰片段
            if (result.length === 0) {
                // 第一个驼峰片段，全部字母都小写
                result += camel.toLowerCase();
            } else {
                // 其他的驼峰片段，首字母大写
                result += (camel.substring(0, 1).toUpperCase());
                result += (camel.substring(1).toLowerCase());
            }
        }
        return result.toString();
    }


    public static formatString(str, args: string[]): string {
        let result = str;
        for (var i = 0; i < args.length; i++) {
            if (args[i] != undefined) {
                var reg = new RegExp("({)" + i + "(})", "g");
                result = result.replace(reg, args[i]);
            }
        }
        return result;
    }

}